﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Numerics;
using System.Net;
using System.Text.RegularExpressions;

namespace ProjectEulerSolutions.Problems
{
    /*Comparing two numbers written in index form like 211 and 37 is not difficult, as any calculator would confirm that 211 = 2048 < 37 = 2187.

However, confirming that 632382518061 > 519432525806 would be much more difficult, as both numbers contain over three million digits.

Using base_exp.txt (right click and 'Save Link/Target As...'), a 22K text file containing one thousand lines with a base/exponent pair on each line, determine which line number has the greatest numerical value.

NOTE: The first two lines in the file represent the numbers in the example given above.

     * */
    class Problem99 : IProblem
    {
        public string Calculate()
        {
            WebClient wc = new WebClient();
            string input = wc.DownloadString("http://projecteuler.net/project/base_exp.txt");

            var pairs = Regex.Matches(input, @"\d+,\d+").Cast<Match>().Select(x=>x.Value.Split(','));

            double maxBase10Power = 1;

            int lineNumber = 0;
            int maxLineNumber = 0;

            foreach (var pair in pairs)
            {
                lineNumber++;

                double base10power = int.Parse(pair[1]) * Math.Log10(int.Parse(pair[0]));
                if (base10power > maxBase10Power)
                {
                    maxBase10Power = base10power;
                    maxLineNumber = lineNumber;
                }
            }

            return maxLineNumber.ToString();
        }
    }
}
